package com.xdcplus.web.service.tool;

import com.xdcplus.mp.service.BaseService;
import com.xdcplus.pager.vo.PageVO;
import com.xdcplus.web.common.pojo.dto.GetToolByWoCodeAndOpeAndUnitTypeDto;
import com.xdcplus.web.common.pojo.dto.tool.ToolInfoDTO;
import com.xdcplus.web.common.pojo.dto.tool.ToolInfoFilterDTO;
import com.xdcplus.web.common.pojo.entity.tool.ToolInfo;
import com.xdcplus.web.common.pojo.vo.alarm.ToolSimpleVo;
import com.xdcplus.web.common.pojo.vo.tool.ToolInfoVO;

import java.util.List;


/**
 * 设备信息(ToolInfo)表服务接口层
 *
 * @author Fish.Fei
 * @since 2023-02-03 15:52:13
 */
public interface ToolInfoService extends BaseService<ToolInfo, ToolInfo, ToolInfoVO> {

    /**
     * 添加设备信息(ToolInfo)
     *
     * @param toolInfoDTO 设备信息(ToolInfoDTO)
     * @return {@link Boolean} 是否成功
     */
    Boolean saveToolInfo(ToolInfoDTO toolInfoDTO);

    /**
     * 修改设备信息(ToolInfo)
     *
     * @param toolInfoDTO 设备信息(ToolInfoDTO)
     * @return {@link Boolean} 是否成功
     */
    Boolean updateToolInfo(ToolInfoDTO toolInfoDTO);

    /**
     * 批量保存或更新设备信息(ToolInfo)
     *
     * @param toolInfoList 设备信息(ToolInfoList)
     * @return {@link Boolean} 是否成功
     */
    Boolean saveOrUpdateBatch(List<ToolInfo> toolInfoList);

    /**
     * 批量保存或更新设备信息(ToolInfoDTOList)
     *
     * @param toolInfoDTOList 设备信息(ToolInfoDTOList)
     * @return {@link Boolean} 是否成功
     */
    Boolean saveOrUpdateBatchByDTOList(List<ToolInfoDTO> toolInfoDTOList);

    /**
     * 删除设备信息(ToolInfo)
     *
     * @param id 设备信息(ToolInfo)主键
     * @return {@link Boolean} 是否成功
     */
    Boolean deleteToolInfoLogical(Long id);
    
    Boolean deleteToolInfoByIds(String ids);

    /**
     * 查询设备信息(ToolInfo)
     *
     * @param toolInfoFilterDTO 过程状态过滤DTO
     * @return {@link PageVO<ToolInfoVO>} 状态信息
     */
    List<ToolInfoVO> queryToolInfoVOList(ToolInfoFilterDTO toolInfoFilterDTO);

    /**
     * 查询设备信息(ToolInfo)
     *
     * @param toolInfoFilterDTO 过程状态过滤DTO
     * @return {@link PageVO<ToolInfoVO>} 状态信息
     */
    PageVO<ToolInfoVO> queryToolInfo(ToolInfoFilterDTO toolInfoFilterDTO);

    /**
     * 查询一个
     *
     * @param id 设备信息(ToolInfo)主键
     * @return {@link ToolInfoVO} 设备信息(ToolInfo)信息
     */
    ToolInfoVO queryToolInfoById(Long id);

    ToolInfoVO getToolInfoVoByToolCode(String toolCode);

    String getToolNameById(Long id);

    String getToolNameByToolCode(String toolCode);

    List<ToolInfoVO> getByRootToolId(Long rootToolId);

    List<Long> getToolIdFkByRootToolId(Long rootToolId);

    /**
     * 根据工单号,工序、设备类型查询设备
     * @param getToolByWoCodeAndOpeAndUnitTypeDto
     * @return
     */
    List<ToolInfoVO> getToolByWoCodeAndOpeAndUnitType(GetToolByWoCodeAndOpeAndUnitTypeDto getToolByWoCodeAndOpeAndUnitTypeDto);


    /**
     * 根据设备和工序查询炉管（离线抽检使用）
     *
     * @param opeId
     */
    List<String> findSubToolByQa(Long toolId,Long opeId);

    /**
    * @Description 设备分页树形结构
    * @Author Devin.sang
    * @Date  2023/5/5 9:09
    */
    PageVO<ToolInfoVO> pageToolInfoForTree(ToolInfoFilterDTO toolInfoFilterDTO);

    /**
     * 根据设备群组查询设备
     * @param opeCode 设备群组Code
     * @return
     */
    List<ToolInfoVO> getToolByOpeCode(String opeCode);

    /**
     * @Description 按线别查询设备
     * @Author Devin.sang
     * @Date  2023/5/12 10:29
     */
    List<ToolInfoVO> getToolByFactoryId(String bayId);


    List<ToolInfoVO>  getToolByOpeAndTypeCode(String opeCode, String toolTypeCode);

    List<ToolInfoVO> queryByParentId(Long toolIdFk);

    ToolInfo queryToolInfoByToolCode(String toolCode);

    List<ToolInfoVO> getToolInfoByClassify(Long toolClassifyId);

    /**
     * 根据区域号查询该区域号及其下级的设备
     * @return
     */
    List<ToolSimpleVo> queryCurrentAndChildByFactoryId(Long factoryId);


}
